<!DOCTYPE html>

<!-- script标签会把请求过来的响应数据当做JS脚本自动执行 -->
<!-- 已登录，返回：var isLogin = true -->
<!-- 未登录，返回：var isLogin = false -->
<script src="/login/status"></script>
<script>
  // console.log(isLogin, 'isLogin');
  if (!isLogin) {
    location.href = '/admin/login.html'
  }
</script>

<html lang="zh-CN">

<head>
  <meta charset="utf-8">
  <title>Posts &laquo; Admin</title>
  <link rel="stylesheet" href="/assets/vendors/bootstrap/css/bootstrap.css">
  <link rel="stylesheet" href="/assets/vendors/font-awesome/css/font-awesome.css">
  <link rel="stylesheet" href="/assets/vendors/nprogress/nprogress.css">
  <link rel="stylesheet" href="/assets/css/admin.css">
  <script src="/assets/vendors/nprogress/nprogress.js"></script>
</head>

<body>
  <script>NProgress.start()</script>

  <div class="main">
    <nav class="navbar">
      <button class="btn btn-default navbar-btn fa fa-bars"></button>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="profile.html"><i class="fa fa-user"></i>个人中心</a></li>
        <li><a href="login.html"><i class="fa fa-sign-out"></i>退出</a></li>
      </ul>
    </nav>
    <div class="container-fluid">
      <div class="page-title">
        <h1>所有文章</h1>
        <a href="post-add.html" class="btn btn-primary btn-xs">写文章</a>
      </div>
      <div class="page-action">
        <!-- show when multiple checked -->
        <a class="btn btn-danger btn-sm" href="javascript:;" style="display: none">批量删除</a>
        <form class="form-inline" id="searchForm">
          <select name="" class="form-control input-sm" id="category">
            <option value="">所有分类</option>
          </select>
          <select name="" class="form-control input-sm" id="state">
            <option value="">所有状态</option>
            <option value="0">草稿</option>
            <option value="1">已发布</option>
          </select>
          <button class="btn btn-default btn-sm" type="submit">筛选</button>
        </form>
        <!-- 分页盒子 -->
        <ul class="pagination pagination-sm pull-right" id="pageBox"></ul>
      </div>
      <table class="table table-striped table-bordered table-hover">
        <thead>
          <tr>
            <th>标题</th>
            <th>作者</th>
            <th>分类</th>
            <th class="text-center">发表时间</th>
            <th class="text-center">状态</th>
            <th class="text-center" width="100">操作</th>
          </tr>
        </thead>
        <!-- 列表盒子 -->
        <tbody id="listBox"></tbody>
      </table>
    </div>
  </div>

  <div class="aside">
    <div class="profile">
      <img class="avatar" src="/uploads/avatar.jpg">
      <h3 class="name">Coder</h3>
    </div>
    <ul class="nav">
      <li>
        <a href="index.html"><i class="fa fa-dashboard"></i>仪表盘</a>
      </li>
      <li class="active">
        <a href="#menu-posts" data-toggle="collapse">
          <i class="fa fa-thumb-tack"></i>文章<i class="fa fa-angle-right"></i>
        </a>
        <ul id="menu-posts" class="collapse in">
          <li class="active"><a href="posts.html">所有文章</a></li>
          <li><a href="post-add.html">写文章</a></li>
          <li><a href="categories.html">分类目录</a></li>
        </ul>
      </li>
      <li>
        <a href="comments.html"><i class="fa fa-comments"></i>评论</a>
      </li>
      <li>
        <a href="users.html"><i class="fa fa-users"></i>用户</a>
      </li>
      <li>
        <a href="#menu-settings" class="collapsed" data-toggle="collapse">
          <i class="fa fa-cogs"></i>设置<i class="fa fa-angle-right"></i>
        </a>
        <ul id="menu-settings" class="collapse">
          <li><a href="slides.html">图片轮播</a></li>
          <li><a href="settings.html">网站设置</a></li>
        </ul>
      </li>
    </ul>
  </div>

  <script src="/assets/vendors/jquery/jquery.js"></script>
  <script src="/assets/vendors/bootstrap/js/bootstrap.js"></script>
  <script src="/assets/vendors/art-template/template-web.js"></script>
  <script>NProgress.done()</script>

  <script type="text/html" id="listTpl">
    {{ each data v }}
    <tr>
      <td>{{ v.title }}</td>
      <td>{{ v.author.nickName }}</td>
      <td>{{ v.category.title }}</td>
      <td class="text-center">{{ v.createAt }}</td>
      <td class="text-center">{{ ['草稿', '已发布'][v.state] }}</td>
      <td class="text-center">
        <a href="/admin/post-edit.html?id={{ v._id }}" class="btn btn-default btn-xs">编辑</a>
        <a href="javascript:;" class="btn btn-danger btn-xs delBtn" data-id="{{ v._id }}" data-title="{{ v.title }}" data-page="{{ page }}">删除</a>
      </td>
    </tr>
    {{ /each }}
  </script>

  <script type="text/html" id="pageTpl">

  <!-- 如果当前页码大于1，说明可以点击上一页按钮 -->
  {{ if page > 1 }}
  <li><a href="javascript:;" data-page="{{ page - 1 }}">上一页</a></li>
  <!-- 否则不可点击，添加禁用样式类 -->
  {{ else }}
  <li class="disabled"><a href="javascript:;">上一页</a></li>
  {{ /if }}

  {{ each display v }}
  <li><a href="javascript:;" data-page="{{ v }}">{{ v }}</a></li>
  {{ /each }}

  <!-- 如果当前页码小于总页数，说明可以点击下一页按钮 -->
  {{ if page < pages }}
  <li><a href="javascript:;" data-page="{{ page + 1 }}">下一页</a></li>
  <!-- 否则不可点击，添加禁用样式类 -->
  {{ else }}
  <li class="disabled"><a href="javascript:;">下一页</a></li>
  {{ /if }}

  </script>

  <!-- 分类下拉列表选项模板 -->
  <script type="text/html" id="cateSelectOptionsTpl">
    <option value="">所有分类</option>
    {{ each data v }}
    <option value="{{ v._id }}">{{ v.title }}</option>
    {{ /each }}
  </script>

  <script>

    $(() => {

      // 列表容器
      const $listBox = $('#listBox')
      // 分页容器
      const $pageBox = $('#pageBox')
      // 分类select
      const $category = $('#category')
      // 状态select
      const $state = $('#state')
      // 条件查询表单
      const $searchForm = $('#searchForm')

      // 渲染列表函数，内部包含了ajax请求，会自动获取查询条件（分类、状态），参数page是渲染第几页数据的页码
      const renderList = (page = 1) => {

        // [ 组装ajax请求参数
        const data = { page }
        // 获取用户当前选择的分类
        const category = $category.val()
        if (category) {
          data.category = category
        }
        // 获取用户当前选择的状态
        const state = $state.val()
        if (state) {
          data.state = state
        }
        // ] 组装ajax请求参数

        $.ajax({
          type: 'GET',
          url: '/posts',
          data,
          success(res) {
            // 解析列表模板，将解析后的html，设置到列表容器（tbody）中
            $listBox.html(template('listTpl', { data: res.records, page: res.page/* 当前页码，也作为模板数据传递到列表渲染模板中去 */ }))
            // 解析分页模板，将解析后的html，设置到分页容器（ul）中
            $pageBox.html(template('pageTpl', res))
          }
        })
      }

      // 页面第一次加载时，渲染第1页的数据
      renderList(1)

      // 用事件委派的形式，监听分页按钮的点击事件，在分页的a标签上面会有页面数据data-page
      $pageBox.on('click', 'a', ({ target }) => {
        const page = target.dataset.page
        // 如果a标签上，不存在data-page属性，则直接终止向下执行
        if (!page) return
        // 渲染指定页的列表数据
        renderList(page)
      })

      // 渲染分类下拉列表中的选项
      const renderCateSelectOptions = () => {
        $.ajax({
          type: 'GET',
          url: '/categories',
          success(res) {
            $category.html(template('cateSelectOptionsTpl', { data: res }))
          }
        })
      }

      // 页面第一次加载的时候，就去发送请求，获取分类列表数据
      renderCateSelectOptions()

      // 当点击筛选按钮提交表单时
      $searchForm.submit(() => {
        // 重新调用renderList函数，渲染第1页的列表数据，在这个函数中会自动获取查询条件（分类、状态）
        renderList(1)
        // 阻止表单默认行为
        return false
      })

      // 给删除按钮添加点击事件（事件委派的形式）
      $listBox.on('click', '.delBtn', ({ target }) => {
        if (!confirm(`你确定要删除 "${ target.dataset.title }" 文章吗？`)) return
        $.ajax({
          type: 'DELETE',
          url: `/posts/${target.dataset.id}`,
          success() {
            // 删除成功后，直接重新渲染列表
            renderList(target.dataset.page)
          }
        })
      })

    })

  </script>

</body>

</html>